import {toHump} from '@/util/toolUtil.js'
/**
	* 删除左右两端的空格
	*/
String.prototype.trim = function () {
  return this.replace(/(^\s*)|(\s*$)/g, '');
}
/**
	* 删除左边的空格
	*/
String.prototype.ltrim = function () {
  return this.replace(/(^\s*)/g, '');
}
/**
	* 删除右边的空格
	*/
String.prototype.rtrim = function () {
  return this.replace(/(\s*$)/g, '');
}
export function genSQL(tableInfo,columnList) {
  var tableName = '';
  var sqlStr = 'use '+tableInfo.tableSchema+'; \nDROP TABLE IF EXISTS ' + tableInfo.tableName + ';\ncreate  table ' +tableInfo.tableName + '(\n';
  var pkStr = '';
  columnList.forEach((item, index) => {
    //处理数据类型
    var dataType = '';
    if(item.dataType == 'char' || item.dataType == 'varchar' || item.dataType == 'int' || item.dataType == 'integer'|| item.dataType == 'bigint')
    {
      dataType = item.dataType + '('+ item.length +')';
    }
    else  if(item.dataType == 'decimal')
    {
      dataType = item.dataType + '('+ item.length +', '+ item.decimalLength +')';
    }
    else
    {
      dataType = item.dataType
    }
    if (index == 0) {
      sqlStr += '\t\t' + item.columnName + ' ' + dataType;
    }
    else {
      sqlStr += ',\n\t\t' + item.columnName + ' ' + dataType;
    }
    if (item.columnKey || item.nullable) {
      sqlStr += '  NOT NULL ';
    }
    if (item.value.trim() != '') // 处理默认值
    {
      if (item.dataType.indexOf('text') >= 0 || item.dataType.indexOf('varchar') >= 0 || item.dataType.indexOf('char') >= 0 || item.dataType.indexOf('CHAR') >= 0) {
        sqlStr += ' default \'' + item.value.trim() + '\'';
      }
      else if (item.dataType.indexOf('datetime') >= 0 || item.dataType.indexOf('DATETIME') >= 0) {
        sqlStr += ' default  \'1990-01-01 00:00:00\'';
      }
      else {
        if (item.dataType == '') {
          sqlStr += ' default 0';
        }
        else {
          sqlStr += ' default ' + item.value.trim();
        }
      }
    }
    else {
      if (item.dataType.indexOf('varchar') >= 0 ||  item.dataType.indexOf('char') >= 0 || item.dataType.indexOf('CHAR') >= 0) {
        sqlStr += ' default  \'\'';
      }
      else if (item.dataType.indexOf('datetime') >= 0 || item.dataType.indexOf('DATETIME') >= 0) {
        sqlStr += ' default  \'1990-01-01 00:00:00\'';
      }
      else {
        // sqlStr += ' default  0';
      }
    }
    //处理comment
    sqlStr += '  comment  \'' + item.columnComment + '\'';
    //处理PK
    if (item.columnKey) {
      if (index == 0) {
        pkStr += item.columnName;
      }
      else {
        pkStr += ', ' + item.columnName;
      }
    }

  });
  sqlStr += ',\n\t\tvalid_flag char(1) DEFAULT \'1\' COMMENT \'有效标志\'';
  sqlStr += ',\n\t\tdata_sign varchar(128) DEFAULT \'\' COMMENT \'数据签名\'';
  sqlStr += ',\n\t\tcreate_user_name varchar(50) DEFAULT \'\' COMMENT \'新增人用户名\'';
  sqlStr += ',\n\t\tcreate_real_name varchar(50) DEFAULT \'\' COMMENT \'新增人姓名\'';
  sqlStr += ',\n\t\tcreate_datetime datetime DEFAULT CURRENT_TIMESTAMP COMMENT \'新增时间\'';
  sqlStr += ',\n\t\tupdate_user_name varchar(50) DEFAULT \'\' COMMENT \'修改人用户名\'';
  sqlStr += ',\n\t\tupdate_real_name varchar(50) DEFAULT \'\' COMMENT \'修改人姓名\'';
  sqlStr += ',\n\t\tupdate_datetime datetime DEFAULT CURRENT_TIMESTAMP COMMENT \'修改时间\'';
  sqlStr += ',\n\t\treserve_string1 varchar(1000) DEFAULT \'\' COMMENT \'备用1\'';
  sqlStr += ',\n\t\treserve_string2 varchar(1000) DEFAULT \'\' COMMENT \'备用2\'';
  sqlStr += ',\n\t\treserve_decimal1 decimal(10,2) DEFAULT \'0.00\' COMMENT \'备用数字1\'';
  sqlStr += ',\n\t\treserve_decimal2 decimal(10,2) DEFAULT \'0.00\' COMMENT \'备用数字2\'';
  sqlStr += ',\n\t\tPRIMARY KEY (' + pkStr + ')';
  sqlStr += ',\n\t\tINDEX tenantId(tenant_id)';
  sqlStr += '\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=\''+tableInfo.tableComment+'\';';
  return sqlStr
}


export function genAddColumnSQL(tableInfo,columnList) {
  var tableName = '';
  var sqlStr = 'use '+tableInfo.tableSchema+';';
  var pkStr = '';
  let lastColumnName = '';
  columnList.forEach((item, index) => {
    //处理数据类型
    var dataType = '';
    if(item.dataType == 'char' || item.dataType == 'varchar' || item.dataType == 'int' || item.dataType == 'integer'|| item.dataType == 'bigint')
    {
      dataType = item.dataType + '('+ item.length +')';
    }
    else  if(item.dataType == 'decimal')
    {
      dataType = item.dataType + '('+ item.length +', '+ item.decimalLength +')';
    }
    else
    {
      dataType = item.dataType
    }
    sqlStr += '\nalter table ' + tableInfo.tableName + ' add '  + item.columnName + ' ' + dataType;
    if (item.columnKey || item.nullable) {
      sqlStr += '  NOT NULL ';
    }
    if (item.value.trim() != '') // 处理默认值
    {
      if (item.dataType.indexOf('text') >= 0 || item.dataType.indexOf('varchar') >= 0 || item.dataType.indexOf('char') >= 0 || item.dataType.indexOf('CHAR') >= 0) {
        if(item.dataType.indexOf('text') < 0){
          sqlStr += ' default \'' + item.value.trim() + '\'';
        }
      }
      else if (item.dataType.indexOf('datetime') >= 0 || item.dataType.indexOf('DATETIME') >= 0) {
        sqlStr += ' default  \'1990-01-01 00:00:00\'';
      }
      else {
        if (item.dataType == '') {
          sqlStr += ' default 0';
        }
        else {
          sqlStr += ' default ' + item.value.trim();
        }
      }
    }
    else {
      if (item.dataType.indexOf('text') >= 0 || item.dataType.indexOf('varchar') >= 0 ||  item.dataType.indexOf('char') >= 0 || item.dataType.indexOf('CHAR') >= 0) {
        if(item.dataType.indexOf('text') < 0){
          sqlStr += ' default  \'\'';
        }
      }
      else if (item.dataType.indexOf('datetime') >= 0 || item.dataType.indexOf('DATETIME') >= 0) {
        sqlStr += ' default  \'1990-01-01 00:00:00\'';
      }
      else {
        // sqlStr += ' default  0';
      }
    }
    //处理comment
    sqlStr += '  comment  \'' + item.columnComment + '\' after '+lastColumnName+';';
    //处理PK
    if (item.columnKey) {
      if (index == 0) {
        pkStr += item.columnName;
      }
      else {
        pkStr += ', ' + item.columnName;
      }
    }
    lastColumnName = item.columnName;
  });
  return sqlStr
}

//genUpdateColumnSQL
export function genUpdateColumnSQL(tableInfo,columnList) {
  var tableName = '';
  var sqlStr = 'use '+tableInfo.tableSchema+';';
  var pkStr = '';
  columnList.forEach((item, index) => {
    //处理数据类型
    var dataType = '';
    if(item.dataType == 'char' || item.dataType == 'varchar' || item.dataType == 'int' || item.dataType == 'integer'|| item.dataType == 'bigint')
    {
      dataType = item.dataType + '('+ item.length +')';
    }
    else  if(item.dataType == 'decimal')
    {
      dataType = item.dataType + '('+ item.length +', '+ item.decimalLength +')';
    }
    else
    {
      dataType = item.dataType
    }
    sqlStr += '\nalter table ' + tableInfo.tableName + ' change '  + item.columnName + ' '+ item.columnName + ' ' + dataType;
    if (item.columnKey || item.nullable) {
      sqlStr += '  NOT NULL ';
    }
    if (item.value.trim() != '') // 处理默认值
    {
      if (item.dataType.indexOf('text') >= 0 || item.dataType.indexOf('varchar') >= 0 || item.dataType.indexOf('char') >= 0 || item.dataType.indexOf('CHAR') >= 0) {
        if(item.dataType.indexOf('text') < 0){
          sqlStr += ' default \'' + item.value.trim() + '\'';
        }
      }
      else if (item.dataType.indexOf('datetime') >= 0 || item.dataType.indexOf('DATETIME') >= 0) {
        sqlStr += ' default  \'1990-01-01 00:00:00\'';
      }
      else {
        if (item.dataType == '') {
          sqlStr += ' default 0';
        }
        else {
          sqlStr += ' default ' + item.value.trim();
        }
      }
    }
    else {
      if (item.dataType.indexOf('text') >= 0 || item.dataType.indexOf('varchar') >= 0 ||  item.dataType.indexOf('char') >= 0 || item.dataType.indexOf('CHAR') >= 0) {
        if(item.dataType.indexOf('text') < 0){
          sqlStr += ' default  \'\'';
        }
      }
      else if (item.dataType.indexOf('datetime') >= 0 || item.dataType.indexOf('DATETIME') >= 0) {
        sqlStr += ' default  \'1990-01-01 00:00:00\'';
      }
      else {
        // sqlStr += ' default  0';
      }
    }
    //处理comment
    sqlStr += '  comment  \'' + item.columnComment + '\';';
    //处理PK
    if (item.columnKey) {
      if (index == 0) {
        pkStr += item.columnName;
      }
      else {
        pkStr += ', ' + item.columnName;
      }
    } 
  });
  return sqlStr
}


//genIndex
export function genIndexSQL(tableInfo,columnList) {
  var indexName = '';
  var sqlStr = 'use '+tableInfo.tableSchema+';';
  var pkStr = '';
  columnList.forEach((item, index) => {
    //处理PK 
    if (index == 0) {
      pkStr += item.columnName;
      indexName = item.columnName;
    }
    else {
      pkStr += ', ' + item.columnName;
    } 
  });
  sqlStr += '\nalter table ' + tableInfo.tableName + ' add index '  + indexName + '('+pkStr+');';
  return sqlStr
}

//生产添加实体

export function genAddColumnEntity(tableInfo,columnList) {
  var sqlStr  = '';
  columnList.forEach((item, index) => {
    //处理数据类型
    /**
    * 表单类型
    */
    // @DataName(name = "表单类型")
    // @ApiModelProperty(value = "表单类型", position = 6)
    // @Length(max=10,message="表单类型长度不能大于10")
    // @NotBlank(message = "表单类型不能为空")
    // private String formType;	  
    sqlStr += '\n\n\t/**';
    sqlStr += '\n\t* '+ item.columnComment ;
    sqlStr += '\n\t*/';
    sqlStr += '\n\t@Excel(name ="'+ item.columnComment +'")';
    sqlStr += '\n\t@DataName(name = "'+ item.columnComment +'", isRecordHistory = true)';
    if (item.columnKey || item.nullable) {
      sqlStr += '\n\t@ApiModelProperty(value = "'+ item.columnComment +'", required= true , position = 6)';
    }
    else{
      sqlStr += '\n\t@ApiModelProperty(value = "'+ item.columnComment +'", required= false , position = 6)';
    }
    sqlStr += '\n\t@Length(max='+item.length+',message="'+ item.columnComment +'长度不能大于'+item.length+'")';
    if (item.columnKey || item.nullable) {
      sqlStr += '\n\t@NotBlank(message = "'+ item.columnComment +'不能为空")';
    }
    sqlStr += '\n\tprivate String '+toHump(item.columnName)+';';
  });
  return sqlStr
}